package net.mingsoft.document.biz;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.mingsoft.base.entity.ResultData;
import net.mingsoft.document.action.q.*;
import net.mingsoft.document.action.r.*;
import net.mingsoft.document.entity.FileEntity;
import net.mingsoft.document.entity.FileLogEntity;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author gengfa
 * @date 22/01/13
 */
public interface FileBiz {

    /**
     * 搜索文件
     * @param query 文件查询
     * @return 文件列表
     */
    Page<FileSearchResponse> searchFile(FileSearchQuery query);

    /**
     * 查询文档列表
     * @param query 查询条件
     * @return 文档列表
     */
    Page<FileEntityResponse> list(FileQuery query);

    /**
     * 返回目录树
     * @return 目录树
     */
    List<DirNode> dirTree();

    /**
     * 返回文件节点
     * @param query 参数
     * @return 文件节点
     */
    Object fileTree(FileTreeQuery query);

    /**
     * 返回目录列表
     * @param query 参数
     * @return 目录树
     */
    List<FileEntity> dirList(DirListQuery query);

    /**
     * 文件日志
     * @param query 参数
     * @return 文件日志列表
     */
    Page<FileLogEntity> fileLog(FileLogQuery query);

    /**
     * 修改名称/编号
     * @param query 查询条件
     * @return 修改结果
     */
    ModifyResponse modify(FileModifyQuery query);

    /**
     * 删除文件
     * @param fileIds 文件ID
     * @return 删除结果
     */
    boolean delete(List<String> fileIds);

    /**
     * 创建文件夹
     * @param query 查询条件
     * @return 新文件夹结果
     */
    MakeDirectoryResponse mkdir(DirQuery query);

    /**
     * 分享文件
     * @param query 分享条件
     * @return 分享结果
     */
    ShareResponse share(FileShareQuery query);

    /**
     * 上传文件
     * @param query 查询条件
     * @return 结果数据
     */
    ResultData uploadMultiFiles(UploadFileQuery query);

    /**
     * 文件下载
     * @param query 下载请求参数
     * @param response 响应
     */
    void download(FileDownloadQuery query, HttpServletResponse response);

    /**
     * 文件预览
     * @param query 文件预览
     * @return 预览内容
     */
    byte[] preview(FilePreviewQuery query);

    /**
     * 文件授权
     * @param query 参数
     * @return 授权结果
     */
    boolean grant(FileGrantQuery query);

    /**
     * 获取文件权限
     * @param fileId 文件ID
     * @return 权限列表
     */
    PermissionWrRdResponse permission(String fileId);

    /**
     * 收藏文件
     * @param query 参数
     * @return 收藏结果
     */
    boolean star(FileStarQuery query);

    /**
     * 移动复制
     * @param query 参数
     * @return 移动复制结果
     */
    MoveCopyResponse moveCopy(FileMoveAndCopyQuery query);
}
